.th FIND I 5/15/74
.sh NAME
find \*- find files
.sh SYNOPSIS
.bd find
pathname expression
.sh DESCRIPTION
.it Find
recursively descends
the directory hierarchy from
.it pathname
seeking files that match a boolean
.it expression
written in the primaries given below.
In the descriptions, the argument
.it n
is used as a decimal integer
where
.it +n
means more than
.it n,
.it \*-n
means less than
.it n
and
.it n
means exactly
.it n.
.s3
.lp +16 16
\fB\*-name\fR filename	True if the
.it filename
argument matches the current file name.
Normal
.it Shell
argument syntax may be used if escaped (watch out for
`[', `?' and `*').
.s3
.lp +16 16
\fB\*-perm\fR onum	\c
True if the file permission flags
exactly
match the
octal number
.it onum
(see chmod(I)).
If
.it onum
is prefixed by a minus sign,
more flag bits (017777, see stat(II)) become significant and
the flags are compared: 
.it "(flags&onum)==onum."
.s3
.lp +16 16
\fB\*-type\fI c\fR	True if the type of the file
is
.it c,
where
.it c
is
.bd "b, c, d"
or
.bd f
for
block special file, character special file,
directory or plain file.
.s3
.lp +16 16
\fB\*-links\fI n\fR	\c
True if the file has
.it n
links.
.s3
.lp +16 16
\fB\*-user\fR uname	\c
True if the file belongs to the user
.it uname.
.s3
.lp +16 16
\fB\*-group\fR gname	\c
As it is for
.bd \*-user
so shall it be for
.bd \*-group
(someday).
.s3
.lp +16 16
\fB\*-size\fI n\fR	\c
True if the file is
.it n
blocks long (512 bytes per block).
.s3
.lp +16 16
\fB\*-atime\fI n\fR	\c
True if the file has been accessed in
.it n
days.
.s3
.lp +16 16
\fB\*-mtime\fI n\fR	\c
True if the file has been modified in
.it n
days.
.s3
.lp +16 16
\fB\*-exec\fR command	\c
True if the executed command returns
exit status zero
(most commands do).
The end of the command is punctuated by an escaped
semicolon.
A command argument `{}' is replaced by the
current pathname.
.s3
.lp +16 16
\fB\*-ok\fR command	\c
Like
.bd \*-exec
except that the generated command line is printed
with a question mark first,
and is executed only if the user responds
\fBy\fR.
.s3
.lp +16 16
\fB\*-print\fR	\c
Always true;
causes the current pathname to be printed.
.s3
.i0
The primaries may be combined with 
these operators
(ordered by precedence):
.s3
.lp +16 16
\fB!\fR	prefix 
.it not
.s3
.lp +16 16
\fB\*-a\fR	infix
.it and,
second operand evaluated only if first is true
.s3
.lp +16 16
\fB\*-o\fR	infix
.it or,
second operand evaluated only if first is false
.s3
.lp +16 16
\fB( \fRexpression\fB )\fR	parentheses for grouping.
(Must be escaped.)
.s3
.i0
To remove files named
`a.out' and `*.o' not accessed for a week:
.s3
.lp +.5i 0
find / "(" \*-name a.out \*-o \*-name "*.o" ")"
\*-a \*-atime +7 \*-a \*-exec rm {} ";"
.i0
.sh FILES
/etc/passwd
.sh "SEE ALSO"
sh (I), if(I), file system (V)
.sh BUGS
There is no way to check device type.
.br
Syntax should be reconciled with
.it if.
